import axios from 'axios'

// 创建axios实例
const apiClient = axios.create({
  baseURL: 'http://localhost:8000', // 后端API的基础URL
  timeout: 10000, // 请求超时时间
})

// 请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 响应拦截器
apiClient.interceptors.response.use(
  (response) => {
    // 对响应数据做些什么
    return response
  },
  (error) => {
    // 对响应错误做些什么
    if (error.response && error.response.status === 401) {
      // 未授权，清除认证信息并重定向到登录页
      localStorage.removeItem('isAuthenticated')
      localStorage.removeItem('token')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// API方法
export const api = {
  // 登录方法
  async login(credentials) {
    try {
      // 调用真实的后端登录API
      const response = await apiClient.post('/auth/token', {
        username: credentials.username,
        password: credentials.password
      })
      
      return response
    } catch (error) {
      // 如果是网络错误或服务器错误，提供更友好的错误信息
      if (!error.response) {
        throw new Error('网络连接失败，请检查网络设置')
      }
      
      // 根据后端返回的错误状态码提供具体错误信息
      switch (error.response.status) {
        case 401:
          throw new Error('用户名或密码错误')
        case 400:
          throw new Error('请求参数错误')
        case 500:
          throw new Error('服务器内部错误，请稍后重试')
        default:
          throw new Error('登录失败，请稍后重试')
      }
    }
  },

  // 获取患者列表
  async getPatients() {
    const response = await apiClient.get('/patients')
    return response.data
  },

  // 获取DICOM图像
  async getDicomImages(patientId) {
    const response = await apiClient.get(`/patients/${patientId}/images`)
    return response.data
  },
  
  // 文件上传
  uploadFile: (formData) => {
    return apiClient.post('/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },
  
  // 获取DICOM文件列表
  getDicomFiles: () => {
    return apiClient.get('/dicom-files')
  },
  
  // 搜索DICOM文件
  searchDicomFiles: (params) => {
    return apiClient.get('/search', { params })
  },
  
  // 删除DICOM文件
  deleteDicomFile: (filename) => {
    return apiClient.delete(`/delete/${filename}`)
  },
  
  // 下载DICOM文件
  downloadDicomFile: (filename) => {
    return apiClient.get(`/download/${filename}`)
  },
  
  // // 获取患者列表
  // getDicomFiles: () => {
  //   // 从后端获取真实的DICOM文件列表
  //   return apiClient.get('/dicom-files')
  // },
  
  // 获取患者图像数据
  getPatientImages: (patientId) => { 
    
    console.log("匹配患者文件")
    // 实际API调用获取患者图像信息
    return apiClient.get(`/dicom-file?filename=${patientId}`)
      .then(response => {
        // 查找匹配的患者文件

        console.log("匹配患者文件000:", response.data.dcm_info)
        return response.data.dcm_info
      })
        
  },
  
  // 获取DICOM元数据
  getDicomMetadata: (filename) => {
    return apiClient.get(`/dicom-metadata/${filename}`)
  },
  
  // 获取DICOM帧列表
  getDicomFrames: (filename) => {
    return apiClient.get(`/dicom-frames/${filename}`)
  }
}

export default apiClient